package com.ltmonitor.app;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentMap;

import com.ltmonitor.jt808.protocol.T808Message;
/**
 * 808服务器全局配置
 * @author admin
 *
 */
public class GlobalConfig {
	/**
	 * 用于输出到界面
	 */
	private static ConcurrentLinkedQueue<T808Message> messageQueueForDisplay = new ConcurrentLinkedQueue();
	/**
	 * 是否在界面上显示消息报文日志
	 */
	public static boolean displayMsg = false;
	/**
	 * 是否在界面上显示当前的终端连接
	 */
	public static boolean displayConnection = false;

	/**
	 * 补报数据延迟发送，为了部标过检测，所做的延迟，如果立即补发，不会通过
	 */
	public static long reportHistoryDelay = 15000;

	/**
	 * 809等待转发的条数，用于界面上显示条数，便于跟踪转发到809的队列是否拥挤
	 */
	public static int waitFor809TransferNum = 0;
	//真实数据补发
	public static long realDataWaitForSendNum = 0;
	/**
	 * 808是否连接到809server
	 */
	public static boolean jt809serverConnected = true;

	public static int listenPort = 0;
	/**
	 * 总转发报数
	 */
	public static long totalTransferNum = 0;
	/**
	 * 总定位包数
	 */
	public static long totalLocationPacketNum = 0;

	public static long connectNum = 0;
	public static String filterSimNo = "";
	/**
	 * 信息菜单Id和菜单名称的映射
	 */
	public static Map<Integer, String> infoMenuIdMap = new HashMap<Integer, String>();

	public static  ConcurrentMap<String, Boolean> connectionStateMap = new ConcurrentHashMap<String, Boolean>();

	/**
	 * 将要输出到界面的消息放入队列中，等待输出
	 * @param tm
	 */
	public static void putMsg(T808Message tm) {
//		if (displayMsg == false) {
		if (true) {
			int msgType = tm.getMessageType();
			if (
//					msgType == 0x0002 || msgType == 0x0200 ||
					msgType == 0x8001
					|| msgType == 0x0102 || msgType == 0x8100
					|| msgType == 0x0100
					|| msgType == 0x0003 || msgType == 0x0704
					)
				return;
		}
		if(filterSimNo!= null && filterSimNo.length() > 0 )
		{
			if(tm.getSimNo() == null || tm.getSimNo().indexOf(filterSimNo) < 0)
				return;
		}
		messageQueueForDisplay.add(tm);
	}

	public static T808Message getMsgForDisplay() {
		return messageQueueForDisplay.poll();
	}

}
